# Author: xpt
# 开发时间：2021/11/6 14:17

from PIL import Image
import numpy as np
import matplotlib.pyplot as plt
import jieba
from wordcloud import WordCloud, STOPWORDS

# 读取Text文本,没有分好词的
_text = open(r'_xpt.txt', encoding='utf-8').read()
# 将文本已词语的方式分割 分割后赋值给Word
# ut_all=True 是全模式 cut_all=False 是精确模式 默认是精确模式
cutData = jieba.cut(_text, cut_all=False)
# 以空格分开词语
text = " ".join(cutData)

# 获取已经空格分好的词汇
# text = open(r'xpt.txt', encoding='utf-8').read()
# 这里的图形，不要用透明的png，画布颜色要用全白（#FFFFFF），也就是白底，其他颜色都会被画出来
alice_mask = np.array(Image.open("xpt.png"))
# 处理停用词
stopwords = set(STOPWORDS)
stopwords.add("的")
wc = WordCloud(
    # 引入字体，使用中文词汇就必须要引入，纯英文不需要
    font_path=r'wqy-microhei.ttc',
    # 如果不需要生成透明png，就设置为"white"等
    background_color=None,
    # 显示的词的最大个数
    max_words=2000,
    # 如果参数为空，则使用二维遮罩绘制词云。
    # 如果 mask 非空，设置的宽高值将被忽略，遮罩形状被 mask 取代。
    mask=alice_mask,
    # 当参数为“RGBA”并且background_color不为空时，背景为透明
    mode='RGBA',
    stopwords=stopwords)
# 生成词云图
wc.generate(text)
# 保存图片
wc.to_file("xpt_result.png")

# 下面是展示生成图片和原图
plt.imshow(wc, interpolation='bilinear')
plt.axis("off")
plt.figure()
plt.imshow(alice_mask, cmap=plt.cm.gray, interpolation='bilinear')
plt.axis("off")
plt.show()
